home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / sys / stat.h < prev    next >
C/C++ Source or Header  |  2009-10-07  |  17KB  |  538 lines

  1. /* Copyright (C) 1991, 1992, 1995-2004, 2005, 2006, 2007, 2009
  2.    Free Software Foundation, Inc.
  3.    This file is part of the GNU C Library.
  4.  
  5.    The GNU C Library is free software; you can redistribute it and/or
  6.    modify it under the terms of the GNU Lesser General Public
  7.    License as published by the Free Software Foundation; either
  8.    version 2.1 of the License, or (at your option) any later version.
  9.  
  10.    The GNU C Library is distributed in the hope that it will be useful,
  11.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.    Lesser General Public License for more details.
  14.  
  15.    You should have received a copy of the GNU Lesser General Public
  16.    License along with the GNU C Library; if not, write to the Free
  17.    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  18.    02111-1307 USA.  */
  19.  
  20. /*
  21.  *    POSIX Standard: 5.6 File Characteristics    <sys/stat.h>
  22.  */
  23.  
  24. #ifndef    _SYS_STAT_H
  25. #define    _SYS_STAT_H    1
  26.  
  27. #include <features.h>
  28.  
  29. #include <bits/types.h>        /* For __mode_t and __dev_t.  */
  30.  
  31. #if defined __USE_XOPEN || defined __USE_XOPEN2K || defined __USE_MISC \
  32.          || defined __USE_ATFILE
  33. # if defined __USE_XOPEN || defined __USE_XOPEN2K
  34. #  define __need_time_t
  35. # endif
  36. # if defined __USE_MISC || defined __USE_ATFILE
  37. #  define __need_timespec
  38. # endif
  39. # include <time.h>        /* For time_t resp. timespec.  */
  40. #endif
  41.  
  42. #if defined __USE_XOPEN || defined __USE_XOPEN2K
  43. /* The Single Unix specification says that some more types are
  44.    available here.  */
  45. # ifndef __dev_t_defined
  46. typedef __dev_t dev_t;
  47. #  define __dev_t_defined
  48. # endif
  49.  
  50. # ifndef __gid_t_defined
  51. typedef __gid_t gid_t;
  52. #  define __gid_t_defined
  53. # endif
  54.  
  55. # ifndef __ino_t_defined
  56. #  ifndef __USE_FILE_OFFSET64
  57. typedef __ino_t ino_t;
  58. #  else
  59. typedef __ino64_t ino_t;
  60. #  endif
  61. #  define __ino_t_defined
  62. # endif
  63.  
  64. # ifndef __mode_t_defined
  65. typedef __mode_t mode_t;
  66. #  define __mode_t_defined
  67. # endif
  68.  
  69. # ifndef __nlink_t_defined
  70. typedef __nlink_t nlink_t;
  71. #  define __nlink_t_defined
  72. # endif
  73.  
  74. # ifndef __off_t_defined
  75. #  ifndef __USE_FILE_OFFSET64
  76. typedef __off_t off_t;
  77. #  else
  78. typedef __off64_t off_t;
  79. #  endif
  80. #  define __off_t_defined
  81. # endif
  82.  
  83. # ifndef __uid_t_defined
  84. typedef __uid_t uid_t;
  85. #  define __uid_t_defined
  86. # endif
  87. #endif    /* X/Open */
  88.  
  89. #ifdef __USE_UNIX98
  90. # ifndef __blkcnt_t_defined
  91. #  ifndef __USE_FILE_OFFSET64
  92. typedef __blkcnt_t blkcnt_t;
  93. #  else
  94. typedef __blkcnt64_t blkcnt_t;
  95. #  endif
  96. #  define __blkcnt_t_defined
  97. # endif
  98.  
  99. # ifndef __blksize_t_defined
  100. typedef __blksize_t blksize_t;
  101. #  define __blksize_t_defined
  102. # endif
  103. #endif    /* Unix98 */
  104.  
  105. __BEGIN_DECLS
  106.  
  107. #include <bits/stat.h>
  108.  
  109. #if defined __USE_BSD || defined __USE_MISC || defined __USE_XOPEN
  110. # define S_IFMT        __S_IFMT
  111. # define S_IFDIR    __S_IFDIR
  112. # define S_IFCHR    __S_IFCHR
  113. # define S_IFBLK    __S_IFBLK
  114. # define S_IFREG    __S_IFREG
  115. # ifdef __S_IFIFO
  116. #  define S_IFIFO    __S_IFIFO
  117. # endif
  118. # ifdef __S_IFLNK
  119. #  define S_IFLNK    __S_IFLNK
  120. # endif
  121. # if (defined __USE_BSD || defined __USE_MISC || defined __USE_UNIX98) \
  122.      && defined __S_IFSOCK
  123. #  define S_IFSOCK    __S_IFSOCK
  124. # endif
  125. #endif
  126.  
  127. /* Test macros for file types.    */
  128.  
  129. #define    __S_ISTYPE(mode, mask)    (((mode) & __S_IFMT) == (mask))
  130.  
  131. #define    S_ISDIR(mode)     __S_ISTYPE((mode), __S_IFDIR)
  132. #define    S_ISCHR(mode)     __S_ISTYPE((mode), __S_IFCHR)
  133. #define    S_ISBLK(mode)     __S_ISTYPE((mode), __S_IFBLK)
  134. #define    S_ISREG(mode)     __S_ISTYPE((mode), __S_IFREG)
  135. #ifdef __S_IFIFO
  136. # define S_ISFIFO(mode)     __S_ISTYPE((mode), __S_IFIFO)
  137. #endif
  138. #ifdef __S_IFLNK
  139. # define S_ISLNK(mode)     __S_ISTYPE((mode), __S_IFLNK)
  140. #endif
  141.  
  142. #if defined __USE_BSD && !defined __S_IFLNK
  143. # define S_ISLNK(mode)  0
  144. #endif
  145.  
  146. #if (defined __USE_BSD || defined __USE_UNIX98) \
  147.     && defined __S_IFSOCK
  148. # define S_ISSOCK(mode) __S_ISTYPE((mode), __S_IFSOCK)
  149. #endif
  150.  
  151. /* These are from POSIX.1b.  If the objects are not implemented using separate
  152.    distinct file types, the macros always will evaluate to zero.  Unlike the
  153.    other S_* macros the following three take a pointer to a `struct stat'
  154.    object as the argument.  */
  155. #ifdef    __USE_POSIX199309
  156. # define S_TYPEISMQ(buf) __S_TYPEISMQ(buf)
  157. # define S_TYPEISSEM(buf) __S_TYPEISSEM(buf)
  158. # define S_TYPEISSHM(buf) __S_TYPEISSHM(buf)
  159. #endif
  160.  
  161.  
  162. /* Protection bits.  */
  163.  
  164. #define    S_ISUID __S_ISUID    /* Set user ID on execution.  */
  165. #define    S_ISGID    __S_ISGID    /* Set group ID on execution.  */
  166.  
  167. #if defined __USE_BSD || defined __USE_MISC || defined __USE_XOPEN
  168. /* Save swapped text after use (sticky bit).  This is pretty well obsolete.  */
  169. # define S_ISVTX    __S_ISVTX
  170. #endif
  171.  
  172. #define    S_IRUSR    __S_IREAD    /* Read by owner.  */
  173. #define    S_IWUSR    __S_IWRITE    /* Write by owner.  */
  174. #define    S_IXUSR    __S_IEXEC    /* Execute by owner.  */
  175. /* Read, write, and execute by owner.  */
  176. #define    S_IRWXU    (__S_IREAD|__S_IWRITE|__S_IEXEC)
  177.  
  178. #if defined __USE_MISC && defined __USE_BSD
  179. # define S_IREAD    S_IRUSR
  180. # define S_IWRITE    S_IWUSR
  181. # define S_IEXEC    S_IXUSR
  182. #endif
  183.  
  184. #define    S_IRGRP    (S_IRUSR >> 3)    /* Read by group.  */
  185. #define    S_IWGRP    (S_IWUSR >> 3)    /* Write by group.  */
  186. #define    S_IXGRP    (S_IXUSR >> 3)    /* Execute by group.  */
  187. /* Read, write, and execute by group.  */
  188. #define    S_IRWXG    (S_IRWXU >> 3)
  189.  
  190. #define    S_IROTH    (S_IRGRP >> 3)    /* Read by others.  */
  191. #define    S_IWOTH    (S_IWGRP >> 3)    /* Write by others.  */
  192. #define    S_IXOTH    (S_IXGRP >> 3)    /* Execute by others.  */
  193. /* Read, write, and execute by others.  */
  194. #define    S_IRWXO    (S_IRWXG >> 3)
  195.  
  196.  
  197. #ifdef    __USE_BSD
  198. /* Macros for common mode bit masks.  */
  199. # define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */
  200. # define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)/* 07777 */
  201. # define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666*/
  202.  
  203. # define S_BLKSIZE    512    /* Block size for `st_blocks'.  */
  204. #endif
  205.  
  206.  
  207. #ifndef __USE_FILE_OFFSET64
  208. /* Get file attributes for FILE and put them in BUF.  */
  209. extern int stat (__const char *__restrict __file,
  210.          struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
  211.  
  212. /* Get file attributes for the file, device, pipe, or socket
  213.    that file descriptor FD is open on and put them in BUF.  */
  214. extern int fstat (int __fd, struct stat *__buf) __THROW __nonnull ((2));
  215. #else
  216. # ifdef __REDIRECT_NTH
  217. extern int __REDIRECT_NTH (stat, (__const char *__restrict __file,
  218.                   struct stat *__restrict __buf), stat64)
  219.      __nonnull ((1, 2));
  220. extern int __REDIRECT_NTH (fstat, (int __fd, struct stat *__buf), fstat64)
  221.      __nonnull ((2));
  222. # else
  223. #  define stat stat64
  224. #  define fstat fstat64
  225. # endif
  226. #endif
  227. #ifdef __USE_LARGEFILE64
  228. extern int stat64 (__const char *__restrict __file,
  229.            struct stat64 *__restrict __buf) __THROW __nonnull ((1, 2));
  230. extern int fstat64 (int __fd, struct stat64 *__buf) __THROW __nonnull ((2));
  231. #endif
  232.  
  233. #ifdef __USE_ATFILE
  234. /* Similar to stat, get the attributes for FILE and put them in BUF.
  235.    Relative path names are interpreted relative to FD unless FD is
  236.    AT_FDCWD.  */
  237. # ifndef __USE_FILE_OFFSET64
  238. extern int fstatat (int __fd, __const char *__restrict __file,
  239.             struct stat *__restrict __buf, int __flag)
  240.      __THROW __nonnull ((2, 3));
  241. # else
  242. #  ifdef __REDIRECT_NTH
  243. extern int __REDIRECT_NTH (fstatat, (int __fd, __const char *__restrict __file,
  244.                      struct stat *__restrict __buf,
  245.                      int __flag),
  246.                fstatat64) __nonnull ((2, 3));
  247. #  else
  248. #   define fstatat fstatat64
  249. #  endif
  250. # endif
  251.  
  252. # ifdef __USE_LARGEFILE64
  253. extern int fstatat64 (int __fd, __const char *__restrict __file,
  254.               struct stat64 *__restrict __buf, int __flag)
  255.      __THROW __nonnull ((2, 3));
  256. # endif
  257. #endif
  258.  
  259. #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K
  260. # ifndef __USE_FILE_OFFSET64
  261. /* Get file attributes about FILE and put them in BUF.
  262.    If FILE is a symbolic link, do not follow it.  */
  263. extern int lstat (__const char *__restrict __file,
  264.           struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
  265. # else
  266. #  ifdef __REDIRECT_NTH
  267. extern int __REDIRECT_NTH (lstat,
  268.                (__const char *__restrict __file,
  269.                 struct stat *__restrict __buf), lstat64)
  270.      __nonnull ((1, 2));
  271. #  else
  272. #   define lstat lstat64
  273. #  endif
  274. # endif
  275. # ifdef __USE_LARGEFILE64
  276. extern int lstat64 (__const char *__restrict __file,
  277.             struct stat64 *__restrict __buf)
  278.      __THROW __nonnull ((1, 2));
  279. # endif
  280. #endif
  281.  
  282. /* Set file access permissions for FILE to MODE.
  283.    If FILE is a symbolic link, this affects its target instead.  */
  284. extern int chmod (__const char *__file, __mode_t __mode)
  285.      __THROW __nonnull ((1));
  286.  
  287. #ifdef __USE_BSD
  288. /* Set file access permissions for FILE to MODE.
  289.    If FILE is a symbolic link, this affects the link itself
  290.    rather than its target.  */
  291. extern int lchmod (__const char *__file, __mode_t __mode)
  292.      __THROW __nonnull ((1));
  293. #endif
  294.  
  295. /* Set file access permissions of the file FD is open on to MODE.  */
  296. #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
  297. extern int fchmod (int __fd, __mode_t __mode) __THROW;
  298. #endif
  299.  
  300. #ifdef __USE_ATFILE
  301. /* Set file access permissions of FILE relative to
  302.    the directory FD is open on.  */
  303. extern int fchmodat (int __fd, __const char *__file, __mode_t __mode,
  304.              int __flag)
  305.      __THROW __nonnull ((2)) __wur;
  306. #endif /* Use ATFILE.  */
  307.  
  308.  
  309.  
  310. /* Set the file creation mask of the current process to MASK,
  311.    and return the old creation mask.  */
  312. extern __mode_t umask (__mode_t __mask) __THROW;
  313.  
  314. #ifdef    __USE_GNU
  315. /* Get the current `umask' value without changing it.
  316.    This function is only available under the GNU Hurd.  */
  317. extern __mode_t getumask (void) __THROW;
  318. #endif
  319.  
  320. /* Create a new directory named PATH, with permission bits MODE.  */
  321. extern int mkdir (__const char *__path, __mode_t __mode)
  322.      __THROW __nonnull ((1));
  323.  
  324. #ifdef __USE_ATFILE
  325. /* Like mkdir, create a new directory with permission bits MODE.  But
  326.    interpret relative PATH names relative to the directory associated
  327.    with FD.  */
  328. extern int mkdirat (int __fd, __const char *__path, __mode_t __mode)
  329.      __THROW __nonnull ((2));
  330. #endif
  331.  
  332. /* Create a device file named PATH, with permission and special bits MODE
  333.    and device number DEV (which can be constructed from major and minor
  334.    device numbers with the `makedev' macro above).  */
  335. #if defined __USE_MISC || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
  336. extern int mknod (__const char *__path, __mode_t __mode, __dev_t __dev)
  337.      __THROW __nonnull ((1));
  338.  
  339. # ifdef __USE_ATFILE
  340. /* Like mknod, create a new device file with permission bits MODE and
  341.    device number DEV.  But interpret relative PATH names relative to
  342.    the directory associated with FD.  */
  343. extern int mknodat (int __fd, __const char *__path, __mode_t __mode,
  344.             __dev_t __dev) __THROW __nonnull ((2));
  345. # endif
  346. #endif
  347.  
  348.  
  349. /* Create a new FIFO named PATH, with permission bits MODE.  */
  350. extern int mkfifo (__const char *__path, __mode_t __mode)
  351.      __THROW __nonnull ((1));
  352.  
  353. #ifdef __USE_ATFILE
  354. /* Like mkfifo, create a new FIFO with permission bits MODE.  But
  355.    interpret relative PATH names relative to the directory associated
  356.    with FD.  */
  357. extern int mkfifoat (int __fd, __const char *__path, __mode_t __mode)
  358.      __THROW __nonnull ((2));
  359. #endif
  360.  
  361. #ifdef __USE_ATFILE
  362. /* Set file access and modification times relative to directory file
  363.    descriptor.  */
  364. extern int utimensat (int __fd, __const char *__path,
  365.               __const struct timespec __times[2],
  366.               int __flags)
  367.      __THROW __nonnull ((2));
  368. #endif
  369.  
  370. #ifdef __USE_XOPEN2K8
  371. /* Set file access and modification times of the file associated with FD.  */
  372. extern int futimens (int __fd, __const struct timespec __times[2]) __THROW;
  373. #endif
  374.  
  375. /* To allow the `struct stat' structure and the file type `mode_t'
  376.    bits to vary without changing shared library major version number,
  377.    the `stat' family of functions and `mknod' are in fact inline
  378.    wrappers around calls to `xstat', `fxstat', `lxstat', and `xmknod',
  379.    which all take a leading version-number argument designating the
  380.    data structure and bits used.  <bits/stat.h> defines _STAT_VER with
  381.    the version number corresponding to `struct stat' as defined in
  382.    that file; and _MKNOD_VER with the version number corresponding to
  383.    the S_IF* macros defined therein.  It is arranged that when not
  384.    inlined these function are always statically linked; that way a
  385.    dynamically-linked executable always encodes the version number
  386.    corresponding to the data structures it uses, so the `x' functions
  387.    in the shared library can adapt without needing to recompile all
  388.    callers.  */
  389.  
  390. #ifndef _STAT_VER
  391. # define _STAT_VER    0
  392. #endif
  393. #ifndef _MKNOD_VER
  394. # define _MKNOD_VER    0
  395. #endif
  396.  
  397. /* Wrappers for stat and mknod system calls.  */
  398. #ifndef __USE_FILE_OFFSET64
  399. extern int __fxstat (int __ver, int __fildes, struct stat *__stat_buf)
  400.      __THROW __nonnull ((3));
  401. extern int __xstat (int __ver, __const char *__filename,
  402.             struct stat *__stat_buf) __THROW __nonnull ((2, 3));
  403. extern int __lxstat (int __ver, __const char *__filename,
  404.              struct stat *__stat_buf) __THROW __nonnull ((2, 3));
  405. extern int __fxstatat (int __ver, int __fildes, __const char *__filename,
  406.                struct stat *__stat_buf, int __flag)
  407.      __THROW __nonnull ((3, 4));
  408. #else
  409. # ifdef __REDIRECT_NTH
  410. extern int __REDIRECT_NTH (__fxstat, (int __ver, int __fildes,
  411.                       struct stat *__stat_buf), __fxstat64)
  412.      __nonnull ((3));
  413. extern int __REDIRECT_NTH (__xstat, (int __ver, __const char *__filename,
  414.                      struct stat *__stat_buf), __xstat64)
  415.      __nonnull ((2, 3));
  416. extern int __REDIRECT_NTH (__lxstat, (int __ver, __const char *__filename,
  417.                       struct stat *__stat_buf), __lxstat64)
  418.      __nonnull ((2, 3));
  419. extern int __REDIRECT_NTH (__fxstatat, (int __ver, int __fildes,
  420.                     __const char *__filename,
  421.                     struct stat *__stat_buf, int __flag),
  422.                __fxstatat64) __nonnull ((3, 4));
  423.  
  424. # else
  425. #  define __fxstat __fxstat64
  426. #  define __xstat __xstat64
  427. #  define __lxstat __lxstat64
  428. # endif
  429. #endif
  430.  
  431. #ifdef __USE_LARGEFILE64
  432. extern int __fxstat64 (int __ver, int __fildes, struct stat64 *__stat_buf)
  433.      __THROW __nonnull ((3));
  434. extern int __xstat64 (int __ver, __const char *__filename,
  435.               struct stat64 *__stat_buf) __THROW __nonnull ((2, 3));
  436. extern int __lxstat64 (int __ver, __const char *__filename,
  437.                struct stat64 *__stat_buf) __THROW __nonnull ((2, 3));
  438. extern int __fxstatat64 (int __ver, int __fildes, __const char *__filename,
  439.              struct stat64 *__stat_buf, int __flag)
  440.      __THROW __nonnull ((3, 4));
  441. #endif
  442. extern int __xmknod (int __ver, __const char *__path, __mode_t __mode,
  443.              __dev_t *__dev) __THROW __nonnull ((2, 4));
  444.  
  445. extern int __xmknodat (int __ver, int __fd, __const char *__path,
  446.                __mode_t __mode, __dev_t *__dev)
  447.      __THROW __nonnull ((3, 5));
  448.  
  449. #if defined __GNUC__ && __GNUC__ >= 2 && defined __USE_EXTERN_INLINES_IN_LIBC
  450. /* Inlined versions of the real stat and mknod functions.  */
  451.  
  452. __extern_inline int
  453. __NTH (stat (__const char *__path, struct stat *__statbuf))
  454. {
  455.   return __xstat (_STAT_VER, __path, __statbuf);
  456. }
  457.  
  458. # if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
  459. __extern_inline int
  460. __NTH (lstat (__const char *__path, struct stat *__statbuf))
  461. {
  462.   return __lxstat (_STAT_VER, __path, __statbuf);
  463. }
  464. # endif
  465.  
  466. __extern_inline int
  467. __NTH (fstat (int __fd, struct stat *__statbuf))
  468. {
  469.   return __fxstat (_STAT_VER, __fd, __statbuf);
  470. }
  471.  
  472. # ifdef __USE_ATFILE
  473. __extern_inline int
  474. __NTH (fstatat (int __fd, __const char *__filename, struct stat *__statbuf,
  475.         int __flag))
  476. {
  477.   return __fxstatat (_STAT_VER, __fd, __filename, __statbuf, __flag);
  478. }
  479. # endif
  480.  
  481. # if defined __USE_MISC || defined __USE_BSD
  482. __extern_inline int
  483. __NTH (mknod (__const char *__path, __mode_t __mode, __dev_t __dev))
  484. {
  485.   return __xmknod (_MKNOD_VER, __path, __mode, &__dev);
  486. }
  487. # endif
  488.  
  489. # ifdef __USE_ATFILE
  490. __extern_inline int
  491. __NTH (mknodat (int __fd, __const char *__path, __mode_t __mode,
  492.         __dev_t __dev))
  493. {
  494.   return __xmknodat (_MKNOD_VER, __fd, __path, __mode, &__dev);
  495. }
  496. # endif
  497.  
  498. # if defined __USE_LARGEFILE64 \
  499.   && (! defined __USE_FILE_OFFSET64 \
  500.       || (defined __REDIRECT_NTH && defined __OPTIMIZE__))
  501. __extern_inline int
  502. __NTH (stat64 (__const char *__path, struct stat64 *__statbuf))
  503. {
  504.   return __xstat64 (_STAT_VER, __path, __statbuf);
  505. }
  506.  
  507. #  if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
  508. __extern_inline int
  509. __NTH (lstat64 (__const char *__path, struct stat64 *__statbuf))
  510. {
  511.   return __lxstat64 (_STAT_VER, __path, __statbuf);
  512. }
  513. #  endif
  514.  
  515. __extern_inline int
  516. __NTH (fstat64 (int __fd, struct stat64 *__statbuf))
  517. {
  518.   return __fxstat64 (_STAT_VER, __fd, __statbuf);
  519. }
  520.  
  521. #  ifdef __USE_ATFILE
  522. __extern_inline int
  523. __NTH (fstatat64 (int __fd, __const char *__filename, struct stat64 *__statbuf,
  524.           int __flag))
  525. {
  526.   return __fxstatat64 (_STAT_VER, __fd, __filename, __statbuf, __flag);
  527. }
  528. #  endif
  529.  
  530. # endif
  531.  
  532. #endif
  533.  
  534. __END_DECLS
  535.  
  536.  
  537. #endif /* sys/stat.h  */
  538.